Численное дифференцирование

Эта статья находится на начальном уровне проработки, в одной из её версий выборочно используется текст из источника, распространяемого под свободной лицензией
Материал из энциклопедии Руниверсалис

Численное дифференцирование — совокупность методов приближённого вычисления значения производной некоторой функции, заданной таблично или имеющей сложное аналитическое выражение.

Конечные разности

Производная функции [math]\displaystyle{ f }[/math] в точке [math]\displaystyle{ x }[/math] определяется с помощью предела:

[math]\displaystyle{ f'(x) = \lim_{h\to0} \frac{f(x+h) - f(x)}{h}. }[/math]

В числителе дроби под знаком предела стоит конечная разность функции [math]\displaystyle{ f }[/math], в знаменателе — шаг этой разности. Поэтому простейшим методом аппроксимации производной является использование конечных разностей функции [math]\displaystyle{ f }[/math] с некоторым достаточно малым шагом [math]\displaystyle{ h }[/math]. Например, выражение

[math]\displaystyle{ \frac{f(x+h) - f(x)}{h} }[/math]

приближает производную функции [math]\displaystyle{ f }[/math] в точке [math]\displaystyle{ x }[/math] с точностью до величины, пропорциональной [math]\displaystyle{ h }[/math]. Использование выражения

[math]\displaystyle{ \frac{f(x+h) - f(x-h)}{2h} }[/math]

позволяет сократить ошибку приближения до величины, пропорциональной [math]\displaystyle{ h^2 }[/math].

Конечными разностями можно также приближать производные высших порядков.

Интерполяция

Если известны значения функции [math]\displaystyle{ f }[/math] в некоторых узлах [math]\displaystyle{ x_0, x_1, \ldots , x_N }[/math], то можно построить интерполяционный полином [math]\displaystyle{ P_N(x) }[/math] (например, в форме Лагранжа или в форме Ньютона) и приближенно положить

[math]\displaystyle{ f^{(r)}(x)\approx P^{(r)}_N(x), \; 0 \leq r \leq N. }[/math]

Такие выражения называются формулами численного дифференцирования.

Иногда наряду с приближенным равенством удаётся (например, используя формулу Тейлора) получить точное равенство, содержащее остаточный член [math]\displaystyle{ R(x) }[/math], называемый погрешностью численного дифференцирования:

[math]\displaystyle{ f^{(r)}(x)=P^{(r)}_N(x)+R(x), \; 0 \leq r \leq N. }[/math]

Такие выражения называются формулами численного дифференцирования с остаточными членами. Степень, с которой величина [math]\displaystyle{ h = \mbox{max} \{ x_i-x_{i-1} \, | \, i = 1,\ldots,N \} }[/math] входит в остаточный член, называется порядком погрешности формулы численного дифференцирования.

Далее приводятся несколько формул численного дифференцирования с остаточными членами для первой [math]\displaystyle{ ({r=1}) }[/math] и второй [math]\displaystyle{ ({r=2}) }[/math] производных для равноотстоящих узлов с постоянным шагом [math]\displaystyle{ {h\gt 0} }[/math], полученных с использованием формулы Лагранжа:

  • [math]\displaystyle{ r=1, \; N=1 }[/math] (два узла):
[math]\displaystyle{ f'(x_0) = \frac{f_1 - f_0}{h} - \frac{h}{2} f''(\xi), }[/math]
[math]\displaystyle{ f'(x_1) = \frac{f_1 - f_0}{h} + \frac{h}{2} f''(\xi). }[/math]
  • [math]\displaystyle{ r=1, \; N=2 }[/math] (три узла):
[math]\displaystyle{ f'(x_0) = \frac{-3f_0 + 4f_1 - f_2}{2h} + \frac{h^2}{3} f'''(\xi), }[/math]
[math]\displaystyle{ f'(x_1) = \frac{f_2 - f_0}{2h} - \frac{h^2}{6} f'''(\xi), }[/math]
[math]\displaystyle{ f'(x_2) = \frac{f_0 - 4f_1 + 3f_2}{2h} + \frac{h^2}{3} f'''(\xi). }[/math]
  • [math]\displaystyle{ r=2, \; N=2 }[/math] (три узла):
[math]\displaystyle{ f''(x_0) = \frac{f_0 - 2f_1 + f_2}{h^2} - hf'''(\xi), }[/math]
[math]\displaystyle{ f''(x_1) = \frac{f_0 - 2f_1 + f_2}{h^2} - \frac{h^2}{12} f^{(4)}(\xi), }[/math]
[math]\displaystyle{ f''(x_2) = \frac{f_0 - 2f_1 + f_2}{h^2} + hf'''(\xi). }[/math]
  • [math]\displaystyle{ r=2, \; N=3 }[/math] (четыре узла):
[math]\displaystyle{ f''(x_0) = \frac{2f_0 - 5f_1 + 4f_2 - f_3}{h^2} + \frac{11h^2}{12} f^{(4)}(\xi), }[/math]
[math]\displaystyle{ f''(x_1) = \frac{f_0 - 2f_1 + f_2}{h^2} - \frac{h^2}{12} f^{(4)}(\xi), }[/math]
[math]\displaystyle{ f''(x_2) = \frac{f_1 - 2f_2 + f_3}{h^2} - \frac{h^2}{12} f^{(4)}(\xi), }[/math]
[math]\displaystyle{ f''(x_3) = \frac{-f_0 + 4f_1 - 5f_2 + 2f_3}{h^2} + \frac{11h^2}{12} f^{(4)}(\xi). }[/math]

Здесь [math]\displaystyle{ f_i = f(x_i) }[/math], [math]\displaystyle{ i = 0,\ldots,N }[/math], а [math]\displaystyle{ \xi }[/math] — некоторая промежуточная точка между наибольшим и наименьшим из узлов.

В общем случае коэффициенты формул численного дифференцирования можно вычислить для произвольной сетки узлов и любого порядка производной.

Неустранимая погрешность

В формулах численного дифференцирования с постоянным шагом [math]\displaystyle{ h }[/math] значения функции [math]\displaystyle{ f }[/math] делятся на [math]\displaystyle{ h^r }[/math], где [math]\displaystyle{ r }[/math] — порядок вычисляемой производной. Поэтому при малом [math]\displaystyle{ h }[/math] неустранимые погрешности в значениях функции [math]\displaystyle{ f }[/math] оказывают сильное влияние на результат численного дифференцирования. Таким образом, возникает задача выбора оптимального шага [math]\displaystyle{ h }[/math], так как погрешность собственно метода стремится к нулю при [math]\displaystyle{ h\to{0} }[/math], а неустранимая погрешность растет. В результате общая погрешность, которая возникает при численном дифференцировании, может неограниченно возрастать при [math]\displaystyle{ h\to{0} }[/math]. Поэтому задача численного дифференцирования считается некорректно поставленной.

Комплексные числа

Классические приближения конечными разностями содержат неустранимую погрешность и являются плохо обусловленными. Однако, если функция [math]\displaystyle{ f }[/math] является голоморфной, принимает вещественные значения на вещественной прямой и может быть оценена в любой окрестности любой вещественной точки комплексной плоскости, то её производная может быть вычислена устойчивыми методами. Например, первую производную можно сосчитать по формуле с комплексным шагом[1]:

[math]\displaystyle{ f'(x) = \frac{\mbox{Im}(f(x + ih))}{h} + O \left( h^2 \right), }[/math]

где [math]\displaystyle{ i }[/math]мнимая единица. Эту формулу можно получить из следующего разложения в ряд Тейлора:

[math]\displaystyle{ f(x+ih) = f(x)+ihf'(x)-h^2\frac{f''(x)}{2!}-ih^3\frac{f'''(x)}{3!}+\ldots. }[/math]

В общем случае производные произвольного порядка можно вычислить с помощью интегральной формулы Коши:

[math]\displaystyle{ f^{(n)}(a) = \frac{n!}{2\pi i} \oint_\gamma \frac{f(z)}{(z - a)^{n+1}} \,\mathrm{d}z. }[/math]

Интеграл можно вычислять приближённо.

Литература

Примечания

См. также